package com.qqclient.service;

import com.loy.entity.Message;
import com.loy.entity.MessageType;
import com.loy.entity.User;
import com.qqclient.thread.ClientConnectServerThread;
import com.sun.org.apache.regexp.internal.RE;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 1. 该类完成用户登录认证，以及用户注册功能
 */
public class UserClientService {

    private User u ;
    private Socket socket;
    /**
     * 1. 根据 useId 和 pwd 到服务器端验证用户是否合法
     * @param userId
     * @param pwd
     * @return
     */
    public boolean cheeckUser(String userId,String pwd) throws IOException, ClassNotFoundException {
        boolean b=false;

        // 1.将用户输入的用户名和密码封装成 user对象
         u = new User(userId, pwd);

        // 2.将封装好的user对象，发送给服务器端
         socket = new Socket(InetAddress.getByName("127.0.0.1"), 9999);

        // 3. 获取输出流，将user发送给服务器端
        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
        oos.writeObject(u);//发送user对象

        // 4. 读取服务端回复的消息 也就是 message对象
        ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
        Message msg = (Message) ois.readObject();

        // 5. 判断是否登录成功
        if(msg.getMesType().equals(MessageType.MESSAGE_LOGIN_SUCCEED)){
            // 登录成功
            // 登录成功之后，我们需要开启一个线程，让这个线程去和服务器端保持通信
            ClientConnectServerThread ccst = new ClientConnectServerThread(socket);
            // 启动客户端的线程,让其和服务器端做通信
            ccst.start();
            // 为了后面客户端的扩展，我么你将线程放入的一个集合中
            ManageClientConnectServerThread.addClientConnectServerThread(userId,ccst);
            b=true;
        }else {
            // 登录失败了，那么我们就不能启动和服务器通信的线程，需要关闭socket
            socket.close();
        }
        return b;
    }


    /**
     * 1. 向服务器端请求在线用户列表
     */
    public void onlienFriendList(){
        try {
            // 1. 构建请求的消息体，
            Message message = new Message();
            message.setSender(u.getUserId());// 发送消息的人
            message.setMesType( MessageType.MESSAGE_GET_ONLINE_FRIEND);
            ClientConnectServerThread clientConnectServerThread = ManageClientConnectServerThread.getClientConnectServerThread(u.getUserId());
            Socket socket = clientConnectServerThread.getSocket();
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(message);// 将message 发送给 服务器端
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 1. 退出系统，需要给服务器端发送一个退出的消息
     */
    public void logout(){
        Message message = new Message();
        message.setMesType(MessageType.MESSAGE_CLIENT_EXIT);
        message.setSender(u.getUserId());
        // 发送message 到服务器端
        try {
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(message);
            System.out.println(u.getUserId() +"退出了系统....................");
            System.exit(0); //结束进程
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
